/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sv.com.intesal.proyecto.managed;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import sv.com.intesal.clases.LimpiarManaged;
import sv.com.intesal.clases.Mensaje;
import sv.com.intesal.compra.bean.Material;
import sv.com.intesal.proyecto.bean.Cliente;
import sv.com.intesal.proyecto.bean.Proyecto;
import sv.com.intesal.proyecto.bean.TipoProyecto;
import sv.com.intesal.proyecto.controlador.ClienteControlador;
import sv.com.intesal.proyecto.controlador.ProyectoControlador;
import sv.com.intesal.proyecto.controlador.TipoProyectoControlador;
import sv.com.intesal.seguridad.managed.SessionManaged;

/**
 *
 * @author JM
 */
@ManagedBean(name = "proyectoManaged")
@ViewScoped
public class ProyectoManaged implements Serializable {

    private Mensaje m;
    private SessionManaged sm;

    /*PROYECTP*/
    private Proyecto selectedProyecto;
    private Proyecto selectedDetaProyecto;
    private List<Proyecto> proyectos;
    private List<Proyecto> detaProyectos;

    /*CLIENTE*/
    private Cliente selectedCliente;

    /*TIPO PROYECTO*/
    private List<TipoProyecto> tipoProyectos;

    /*MATERIAL*/
    private Material selectedMaterial;

    /*FLAGS STEP 1 and 2*/
    private Boolean flagStep_1;
    private Boolean flagStep_2;

    public ProyectoManaged() {

        m = new Mensaje();
        sm = new SessionManaged();

        this.selectedProyecto = new Proyecto();
        this.selectedCliente = new Cliente();
        this.selectedMaterial = new Material();

        this.flagStep_1 = true;
        this.flagStep_2 = false;
        this.llenarTipoProyecto();
    }

    public void llenarProyecto() {
        try {
            if (sm.validar_rol_usuario("wfrmProyecto", sm.buscar) == true) {
                if (this.getProyectos() == null) {
                    ProyectoControlador pc = new ProyectoControlador();
                    proyectos = pc.getLista_Proyectos();
                }
            }
        } catch (Exception ex) {
            m.message(m.getIerror());
            ex.printStackTrace();
        }
    }

    private void llenarTipoProyecto() {

        try {
            if (this.getTipoProyectos() == null) {
                TipoProyectoControlador tp = new TipoProyectoControlador();
                this.setTipoProyectos(tp.fillComboBox());
            }
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    public void mantenimientoProyecto() {
        try {
            if (this.validar() == true) {
                if (this.getSelectedProyecto().getId_p() == null) {
                    if (sm.validar_rol_usuario("wfrmProyecto", sm.agregar) == true) {
                        this.selectedProyecto.setCodigo_cl(this.selectedCliente.getCodigo_c());

                        ProyectoControlador pc = new ProyectoControlador();
                        pc.setEnca(this.getSelectedProyecto(), this.detaProyectos);
                        LimpiarManaged.limpiar();
                    }
                } else {
                    if (sm.validar_rol_usuario("wfrmProyecto", sm.modificar) == true) {
                        this.selectedProyecto.setCodigo_cl(this.selectedCliente.getCodigo_c());

                        ProyectoControlador pc = new ProyectoControlador();
                        pc.setEnca(this.getSelectedProyecto(), this.detaProyectos);
                        LimpiarManaged.limpiar();
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            m.message(m.getIerror());
        }
    }

    private Boolean validar() throws Exception {

        try {
            Boolean var_return = true;
            if (this.selectedCliente.getEmpresa_c() == null) {
                m.messageError("DEBE SELECCIONAR UN CLIENTE");
                var_return = false;
            }
            if (selectedProyecto.getFecha_inicio_p() == null) {
                m.messageAdvertencia(m.campoError("FECHA INICIO"));
                var_return = false;
            }
            if (selectedProyecto.getFecha_final_p() == null) {
                m.messageAdvertencia(m.campoError("FECHA FINALIZACION"));
                var_return = false;
            }
            if (this.selectedProyecto.getDireccion_p() == null) {
                m.messageAdvertencia(m.campoError("DIRECCION"));
                var_return = false;
            }
            if (this.selectedProyecto.getDescripcion_p() == null) {
                m.messageAdvertencia(m.campoError("DESCRIPCION"));
                var_return = false;
            }
            return var_return;
        } catch (Exception e) {
            throw new Exception(e);
        }
    }

    public void getCliente_Quick(Cliente cl) {
        try {
            this.selectedCliente = cl;
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    public void getMaterial_Quick(Material ma) {

        try {
            this.selectedMaterial = ma;
            if (this.selectedMaterial != null) {
                List<Proyecto> lista = new ArrayList<Proyecto>();
                if (this.detaProyectos != null) {
                    lista = this.detaProyectos;
                }

                Proyecto pr = new Proyecto();
                pr.setNombre_m(this.selectedMaterial.getNombre_m());
                pr.setCodigo_d(0); //deta_proyecto
                pr.setId_dm(this.selectedMaterial.getId_dm());
                pr.setCantidad_d(0.0);
                lista.add(pr);
                this.detaProyectos = lista;
            }
        } catch (Exception e) {
            m.messageError(m.getIerror());
            e.printStackTrace();
        }
    }

    public void ocultarFlag_1() {

        try {
            this.flagStep_1 = false;
            this.flagStep_2 = true;
            this.llenarProyecto();
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    public void ocultarFlag_2() {

        try {
            this.flagStep_1 = true;
            this.flagStep_2 = false;
            if (this.selectedDetaProyecto != null) {
                ProyectoControlador pc = new ProyectoControlador();
                this.detaProyectos = pc.getDetaMateriales_x_Proyecto(this.selectedDetaProyecto);

                ClienteControlador cc = new ClienteControlador();
                this.selectedCliente = cc.getCliente_x_Proyecto(this.selectedDetaProyecto.getId_p());
                this.selectedProyecto = this.selectedDetaProyecto;
                System.out.println(":D");
            }
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    public void eliminarRegistro() {
        try {
            if (this.selectedDetaProyecto == null) {
                m.messageError("DEBE ELEGIR UN REGISTRO PARA CONTINUAR");
            } else if (selectedDetaProyecto.getCodigo_d() == 0) {
                this.detaProyectos.remove(selectedDetaProyecto);
                m.messageInfo(m.getIeliminada());
            } else {
                if (sm.validar_rol_usuario("wfrmProyecto", sm.eliminar) == true) {

                    this.detaProyectos.remove(selectedDetaProyecto);

                    ProyectoControlador pc = new ProyectoControlador();
                    pc.eliminarItemDetaProyecto(this.selectedDetaProyecto);
                }
            }
        } catch (Exception e) {
            m.messageError(m.getIerror());
            e.printStackTrace();
        }
    }

    /*SETTERS AND GETTERS*/
    public Cliente getSelectedCliente() {
        if (selectedCliente == null) {
            selectedCliente = new Cliente();
        }
        return selectedCliente;
    }

    public void setSelectedCliente(Cliente selectedCliente) {
        this.selectedCliente = selectedCliente;
    }

    public List<Proyecto> getProyectos() {
        return proyectos;
    }

    public void setProyectos(List<Proyecto> proyectos) {
        this.proyectos = proyectos;
    }

    public Proyecto getSelectedProyecto() {
        return selectedProyecto;
    }

    public void setSelectedProyecto(Proyecto selectedProyecto) {
        this.selectedProyecto = selectedProyecto;
    }

    public List<TipoProyecto> getTipoProyectos() {
        return tipoProyectos;
    }

    public void setTipoProyectos(List<TipoProyecto> tipoProyectos) {
        this.tipoProyectos = tipoProyectos;
    }

    public List<Proyecto> getDetaProyectos() {
        return detaProyectos;
    }

    public void setDetaProyectos(List<Proyecto> detaProyectos) {
        this.detaProyectos = detaProyectos;
    }

    public Boolean getFlagStep_1() {
        return flagStep_1;
    }

    public void setFlagStep_1(Boolean flagStep_1) {
        this.flagStep_1 = flagStep_1;
    }

    public Boolean getFlagStep_2() {
        return flagStep_2;
    }

    public void setFlagStep_2(Boolean flagStep_2) {
        this.flagStep_2 = flagStep_2;
    }

    public Material getSelectedMaterial() {
        if (selectedMaterial == null) {
            selectedMaterial = new Material();
        }
        return selectedMaterial;
    }

    public void setSelectedMaterial(Material selectedMaterial) {
        this.selectedMaterial = selectedMaterial;
    }

    public Proyecto getSelectedDetaProyecto() {
        if (selectedDetaProyecto == null) {
            selectedDetaProyecto = new Proyecto();
        }
        return selectedDetaProyecto;
    }

    public void setSelectedDetaProyecto(Proyecto selectedDetaProyecto) {
        this.selectedDetaProyecto = selectedDetaProyecto;
    }
}
